package com.myz.rabbitmq.study1;

import com.rabbitmq.client.*;

// 测试fed_exchange
public class Consumer_top {
    // 队列的名称与生产者一样
    public static final String QUEUE_NAME = "mirrior_hello";
    // 创建一个交换机
    public static final String FED_EXCHANGE = "fed_exchange";
    // 接收消息
    public static void main(String[] args) throws Exception {
        // 创建连接工厂
        ConnectionFactory factory = new ConnectionFactory();
        // 设置ip
        factory.setHost("192.168.56.135");
        factory.setUsername("admin");   // 用户名
        factory.setPassword("123456");  // 密码
        // 获取连接
        Connection connection = factory.newConnection();
        // 通过连接获取信道 channel
        Channel channel = connection.createChannel();
        // 声明交换机
        channel.exchangeDeclare(FED_EXCHANGE,BuiltinExchangeType.DIRECT);
        // 声明一个队列
        channel.queueDeclare("node2_queue",true,false,false,null);
        channel.queueBind("node2_queue",FED_EXCHANGE,"routeKey");
        /*
        * 消费者消费消息 参数
        * 1.消费哪个队列
        * 2.消费成功后是否自动应答 true表示自动应答 false表示手动应答
        * 3.消费者成功消费的回调
        * 4.消费者取消消费的回调
        * */
        // 声明 接受消息
        DeliverCallback deliverCallback = (consumerTag,message) -> {
            System.out.println(new String(message.getBody()));
        };
//         取消消息时的回调
        CancelCallback cancelCallback = (consumerTag) -> {
            System.out.println("消息消费被中断");
        };
        System.out.println("consumer down等待接收消息...");
        channel.basicConsume(QUEUE_NAME,true,deliverCallback,cancelCallback);
    }
}
